package com.dyw.Day27;

import java.util.HashMap;

/**
 * @author Devil
 * @create 2022-02-12 23:45
 *
 * https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn4n7c/
 * 罗马数字转整数
 * 罗马数字包含以下七种字符: I， V， X， L，C，D 和 M。
 *
 * 思路:使用map存储不同的组合条件 再遍历字符串找到符合的组合方式 求和
 */
public class Demo01 {
    public int romanToInt(String s) {
        HashMap<String, Integer> map = new HashMap<>();
        //因为题目中规定了 只有如下几种组合方案 所以我们只需要哪一个map存储这个键值对即可
        map.put("I",1);
        map.put("V",5);
        map.put("X",10);
        map.put("L",50);
        map.put("C",100);
        map.put("D",500);
        map.put("M",1000);
        map.put("IV",4);
        map.put("IX",9);
        map.put("XL",40);
        map.put("XC",90);
        map.put("CD",400);
        map.put("CM",900);

        /*因为两个单符号可以组合 所以 我们先判断是否至少还有连个字符 连续两个能否组合 并且指针也要根据走的长度来改变*/
        int sum=0;
        for (int i = 0; i < s.length();) {
            if(i+1<s.length()&&map.containsKey(s.substring(i,i+2))){
                sum+=map.get(s.substring(i,i+2));
                //这里判断了连续两个字符 我们应当将指针加二
                i+=2;
            }else{
                sum+=map.get(s.substring(i,i+1));
                i++;
            }
        }
        return sum;
    }
}
